package com.zliblike_platform.mapper;

import com.zliblike_platform.vo.RankingVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 排行榜数据访问接口
 */
@Mapper
public interface RankingMapper {
    
    /**
     * 获取总积分排行榜
     * @param limit 限制返回数量
     * @return 排行榜数据列表
     */
    List<RankingVO> selectTotalRanking(@Param("limit") Integer limit);
    
    /**
     * 获取上传积分排行榜
     * @param limit 限制返回数量
     * @return 排行榜数据列表
     */
    List<RankingVO> selectUploadRanking(@Param("limit") Integer limit);
    
    /**
     * 获取编辑积分排行榜
     * @param limit 限制返回数量
     * @return 排行榜数据列表
     */
    List<RankingVO> selectEditRanking(@Param("limit") Integer limit);
    
    /**
     * 更新用户上传积分
     * @param userId 用户ID
     * @param points 积分
     * @return 影响行数
     */
    int updateUploadScore(@Param("userId") Long userId, @Param("points") Integer points);
    
    /**
     * 更新用户编辑积分
     * @param userId 用户ID
     * @param points 积分
     * @return 影响行数
     */
    int updateEditScore(@Param("userId") Long userId, @Param("points") Integer points);
    
    /**
     * 更新用户下载积分
     * @param userId 用户ID
     * @param points 积分
     * @return 影响行数
     */
    int updateDownloadScore(@Param("userId") Long userId, @Param("points") Integer points);
    
    /**
     * 更新用户阅读积分
     * @param userId 用户ID
     * @param points 积分
     * @return 影响行数
     */
    int updateReadScore(@Param("userId") Long userId, @Param("points") Integer points);
    
    /**
     * 更新用户评论积分
     * @param userId 用户ID
     * @param points 积分
     * @return 影响行数
     */
    int updateCommentScore(@Param("userId") Long userId, @Param("points") Integer points);
    
    /**
     * 更新用户总积分
     * @param userId 用户ID
     * @return 影响行数
     */
    int updateTotalScore(@Param("userId") Long userId);
    
    /**
     * 获取用户总积分
     * @param userId 用户ID
     * @return 总积分
     */
    Integer selectUserTotalScore(@Param("userId") Long userId);
    
    /**
     * 获取排名前N的用户ID列表
     * @param limit 限制数量
     * @return 用户ID列表
     */
    List<Long> selectTopUserIds(@Param("limit") Integer limit);
} 